/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxline.service;

import br.com.foxline.model.Users;
import br.com.foxline.util.Msg;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author ely
 */
@Stateless
public class UserService extends GenericService<Users> {

    public UserService() {
        super(Users.class);
    }

    public void saveUser(String confirm, Users user) {
        try {
            if (checkUserName(user)) {
                if (compareToPassword(confirm, user)) {
                    user.setPassword(Users.encryptPassword(user.getPassword()));
                   
                    save(user);
                    Msg.messagemInfo("Usuário Cadastrado com Sucesso ");
                } else {
                    Msg.messagemError("Senhas não conferem");
                }
            } else {
                Msg.messagemError("O campo nome é obrigatório");
            }
        } catch (Exception erro) {
        }
    }

     public void updateUser(String confirm, String passwordOld, String passwordNew, Users user) {
        try {

            if (checkUserPassword(passwordOld, user)) {
                if (compareToPassword(confirm, passwordNew)) {
                    user.setPassword(Users.encryptPassword(passwordNew));
                    Msg.messagemInfo("Usuário Atualizado com Sucesso");
                    update(user);
                } else {
                    Msg.messagemError("Senhas não conferem");
                }

            } else {
                Msg.messagemError("Senha antiga não confere");
            }
        } catch (Exception erro) {
        }

    }
     
     public void updateAcess(Users user ){
         try{
           update(user);
           Msg.messagemInfo("Nível de Acesso Atualizado com Sucesso");
         }catch(Exception erro){
             
         }
     }
     
    
    /**
     * Compara senha do usuário
     *
     * @param comparasenha
     * @param usuario
     * @return
     */
    public boolean compareToPassword(String confirm, Users user) {
        boolean b;
        if (user.getPassword().equals(confirm)) {
            b = true;
        } else {
            b = false;
        }
        return b;
    }

    public boolean compareToPassword(String confirm, String passwordNew) {
        boolean b;
        if (passwordNew.equals(confirm)) {
            b = true;
        } else {
            b = false;
        }
        return b;
    }

    /**
     * verifica se o campo name está vazio
     *
     * @param verificacampo
     * @return
     */
    public boolean checkUserName(Users user) {
        boolean b;
        if (!user.getName().equals("")) {
            b = true;
        } else {
            b = false;
        }
        return b;
    }

    /**
     * Compara senha Cripitografada (Senha antiga)
     *
     * @param compara senha
     * @param cripitografia
     * @return
     */
    public boolean checkUserPassword(String senha, Users user) {
        boolean b;
        String s = Users.encryptPassword(senha);
        if (s.equals(user.getPassword())) {
            b = true;
        } else {
            b = false;
        }
        return b;
    }

    /**
     * Pesquisar Usuário
     *
     * @param pesquisarUsuario
     * @return
     */
    public List<Users> findUsers(Users user) {
        String sql = "select u from Users u ";

        if ((!user.getName().equals("")) && (user.getName() != null)) {
            sql += "  WHERE lower(u.name) like lower(:name)  ";
        }
        Query query = getEntityManager().createQuery(sql);

        if ((!user.getName().equals("")) && (user.getName() != null)) {
            query.setParameter("name", "%" + user.getName() + "%");
        }
        return query.getResultList();

    }
}
